package shejimoshi;

/**单例模式
 * 饿汉式（推荐）单例实例在类装载时就构建，急切初始化。（预先加载法）
 *
 *1. Windows的Task Manager（任务管理器）就是很典型的单例模式（这个很熟悉吧），
 * 想想看，是不是呢，你能打开两个windows task manager吗？ 不信你自己试试看哦~
 * 5. Web应用的配置对象的读取，一般也应用单例模式，这个是由于配置文件是共享的资源。
 * 6. 数据库连接池的设计一般也是采用单例模式，因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池，
 * 主要是节省打开或者关闭数据库连接所引起的效率损耗，这种效率上的损耗还是非常昂贵的，因为何用单例模式来维护，就可以大大降低这种损耗。
 *
 * 9. HttpApplication 也是单位例的典型应用。
 * 熟悉ASP.NET(IIS)的整个请求生命周期的人应该知道HttpApplication也是单例模式，所有的HttpModule都共享一个HttpApplication实例.
 * 创建的一个对象需要消耗的资源过多，比如 I/O 与数据库的连接等。
 */

public class Danli {
    private Danli(){

    }
    public Danli danli = new Danli();
    public Danli get(){
        return danli;
    }
}
/**单例模式
 * 懒汉式 单例实例在第一次被使用时构建，延迟初始化。
 */
 class Danli2 {
    private Danli2(){

    }
    public Danli2 danli2 =null;
    public Danli2 get(){
       if(danli2 == null){
           danli2 = new Danli2();
       }
       return danli2;
    }
}
//3.双重检测

class Test {
    private Test() {
    }
    public static Test instance = null;

    public static Test getInstance() {
        if (instance == null) {
            synchronized (Test.class) {
                if (instance == null) {
                    instance = new Test();
                }
            }
        }
        return instance;
    }
}
